package render

import (
	sqlc "bp/db/sqlc"
	"bp/internal/util"
	"database/sql"
	"fmt"
	"github.com/twitchtv/twirp"
	s "strings"
)

// FriendlyEntityError 包装实体的错误信息
func FriendlyEntityError(errPtr *error, entityName string) {
	pgCode := sqlc.ExtractPgCode(errPtr)
	if util.IsEmpty(pgCode) {
		if *errPtr == sql.ErrNoRows {
			*errPtr = NotFound(fmt.Sprintf("无法找到(%s)记录", entityName))
		}
	}
	// todo 扩展不同pgCode的包装错误
}

// 参数值错误
func InvalidArgumentValue(arg string) error {
	return twirp.InvalidArgumentError(arg, "参数值错误")
}

// 参数取值范围错误
func InvalidArgumentRange(arg string) error {
	return twirp.InvalidArgumentError(arg, "取值范围错误")
}

// 参数不匹配错误
func ArgumentMismatch(args ...string) error {
	return twirp.InvalidArgumentError(s.Join(args, ","), "参数不匹配")
}

// 参数取值范围错误
func ArgumentEmpty(arg string) error {
	return twirp.InvalidArgumentError(arg, "不能为空")
}

// 无法找到记录
func NotFound(msg string) error {
	return twirp.NotFoundError(msg)
}
